package ub.pis.net;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;

/**
 * Clase handler para parsear el xml de correccion de artistas que 
 * retorna la api de last.fm
 * @author nagash
 *
 */
public class ArtistCorrectionXMLHandler extends DefaultHandler {
	private String correction;
	private StringBuilder sbTexto;
	private boolean name;

	/**
	 * Guarda en sbTexto el String encontrado.
	 */
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);

		if (name)
			sbTexto.append(ch, start, length);
	}

	/**
	 * Al principio del documento setea las variables necesarias
	 * para encontrar los campos que nos interesan.
	 */
	public void startDocument() throws SAXException {

		super.startDocument();
		
		correction = "";
		name = false;
		sbTexto = new StringBuilder();
	}

	/**
	 * Al inicio de un elemento de tipo "name", cambia el valor del booleano
	 * name a true.
	 */
	public void startElement(String uri, String localName, String name,
			Attributes attributes) throws SAXException {

		super.startElement(uri, localName, name, attributes);

		if (localName.equals("name")) {
			this.name = true;
		}
	}

	/**
	 * Al final de un elemento, si esta contenido dentro de la etiqueta "name"
	 * guarda el nombre del artista en la variable "correction".
	 */
	@Override
	public void endElement(String uri, String localName, String name)
			throws SAXException {

		super.endElement(uri, localName, name);

		if (this.name) {

			if (localName.equals("name")) {
				correction = sbTexto.toString();
			}

			sbTexto.setLength(0);
		}
	}

	/**
	 * retorna un String con la correcion del nombre del artista
	 * @return String
	 */
	public String getCorrection(){
		return correction;
	}

}
